#include <iostream>

using namespace std;

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        int n = cost.size();
        // 创建dp数组，长度为n+1，用于存储到达每一级的最小花费
        vector<int> dp(n + 1);
        
        // 初始化dp数组的前两项1,100,1,1,1,100,1,1,100,1
        dp[0] = 0; // 到达第0级的最小花费为0
        dp[1] = 0; // 到达第1级的最小花费为0
        
        // 从第2级开始计算到达每一级的最小花费
        for (int i = 2; i <= n; i++) {
            // dp[i]表示到达第i级的最小花费
            // 要么从第i-1级到达第i级，需要花费dp[i-1] + cost[i-1]
            // 要么从第i-2级到达第i级，需要花费dp[i-2] + cost[i-2]
            // 取这两者中的最小值
            dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);
        }
        
        // 返回到达楼梯顶端的最小花费，即dp[n]
        return dp[n];
    }
};

int main()
{
    int n;
    cin>>n;
    vector<int> cost;
    int data;
    for(int i=0;i<n;i++)
    {
        cin>>data;
        cost.push_back(data);
    }
    int res=Solution().minCostClimbingStairs(cost);
    cout<<res<<endl;
    return 0;
}